{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.layers import Input, Dense, LSTM\n",
    "from keras.models import Model\n",
    "from keras.layers import *\n",
    "from keras.models import *\n",
    "from keras.optimizers import Adam\n",
    "from keras.callbacks import EarlyStopping\n",
    "from keras import backend as K\n",
    "from keras.engine.topology import Layer\n",
    "from keras import initializers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv(\"data/沪深300天级别数据.csv\",header=0,index_col=None,sep='\\s+',parse_dates=[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time</th>\n",
       "      <th>open</th>\n",
       "      <th>close</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>volume</th>\n",
       "      <th>money</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1619</th>\n",
       "      <td>2018-08-29</td>\n",
       "      <td>3393.05</td>\n",
       "      <td>3386.57</td>\n",
       "      <td>3398.71</td>\n",
       "      <td>3377.12</td>\n",
       "      <td>6702040400</td>\n",
       "      <td>79072300213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1620</th>\n",
       "      <td>2018-08-30</td>\n",
       "      <td>3385.81</td>\n",
       "      <td>3351.09</td>\n",
       "      <td>3402.56</td>\n",
       "      <td>3349.47</td>\n",
       "      <td>6838529000</td>\n",
       "      <td>80226052652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1621</th>\n",
       "      <td>2018-08-31</td>\n",
       "      <td>3333.38</td>\n",
       "      <td>3334.50</td>\n",
       "      <td>3356.58</td>\n",
       "      <td>3310.87</td>\n",
       "      <td>7620563000</td>\n",
       "      <td>96091892858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1622</th>\n",
       "      <td>2018-09-03</td>\n",
       "      <td>3320.69</td>\n",
       "      <td>3321.82</td>\n",
       "      <td>3325.61</td>\n",
       "      <td>3291.78</td>\n",
       "      <td>6642985500</td>\n",
       "      <td>81305681453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1623</th>\n",
       "      <td>2018-09-04</td>\n",
       "      <td>3324.19</td>\n",
       "      <td>3363.90</td>\n",
       "      <td>3370.96</td>\n",
       "      <td>3307.96</td>\n",
       "      <td>6708880700</td>\n",
       "      <td>85892034874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1624</th>\n",
       "      <td>2018-09-05</td>\n",
       "      <td>3349.70</td>\n",
       "      <td>3298.14</td>\n",
       "      <td>3354.20</td>\n",
       "      <td>3298.14</td>\n",
       "      <td>6430188800</td>\n",
       "      <td>80656675217</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1625</th>\n",
       "      <td>2018-09-06</td>\n",
       "      <td>3286.66</td>\n",
       "      <td>3262.88</td>\n",
       "      <td>3311.50</td>\n",
       "      <td>3253.76</td>\n",
       "      <td>6230028800</td>\n",
       "      <td>79373138215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1626</th>\n",
       "      <td>2018-09-07</td>\n",
       "      <td>3273.89</td>\n",
       "      <td>3277.64</td>\n",
       "      <td>3316.61</td>\n",
       "      <td>3253.72</td>\n",
       "      <td>6394740800</td>\n",
       "      <td>81263439990</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1627</th>\n",
       "      <td>2018-09-10</td>\n",
       "      <td>3271.38</td>\n",
       "      <td>3230.07</td>\n",
       "      <td>3277.88</td>\n",
       "      <td>3227.85</td>\n",
       "      <td>6381705100</td>\n",
       "      <td>76175580336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1628</th>\n",
       "      <td>2018-09-11</td>\n",
       "      <td>3229.71</td>\n",
       "      <td>3224.21</td>\n",
       "      <td>3245.62</td>\n",
       "      <td>3209.11</td>\n",
       "      <td>5849130500</td>\n",
       "      <td>67722118923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1629</th>\n",
       "      <td>2018-09-12</td>\n",
       "      <td>3216.99</td>\n",
       "      <td>3202.02</td>\n",
       "      <td>3225.60</td>\n",
       "      <td>3194.98</td>\n",
       "      <td>5462789900</td>\n",
       "      <td>68887020055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1630</th>\n",
       "      <td>2018-09-13</td>\n",
       "      <td>3239.69</td>\n",
       "      <td>3236.57</td>\n",
       "      <td>3249.59</td>\n",
       "      <td>3191.40</td>\n",
       "      <td>6729032700</td>\n",
       "      <td>85887962112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1631</th>\n",
       "      <td>2018-09-14</td>\n",
       "      <td>3242.83</td>\n",
       "      <td>3242.09</td>\n",
       "      <td>3254.10</td>\n",
       "      <td>3227.94</td>\n",
       "      <td>6013064000</td>\n",
       "      <td>76481211955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1632</th>\n",
       "      <td>2018-09-17</td>\n",
       "      <td>3224.93</td>\n",
       "      <td>3204.92</td>\n",
       "      <td>3230.79</td>\n",
       "      <td>3200.51</td>\n",
       "      <td>5225954700</td>\n",
       "      <td>60650940907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1633</th>\n",
       "      <td>2018-09-18</td>\n",
       "      <td>3193.64</td>\n",
       "      <td>3269.43</td>\n",
       "      <td>3270.11</td>\n",
       "      <td>3193.64</td>\n",
       "      <td>7042503500</td>\n",
       "      <td>83899137593</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1634</th>\n",
       "      <td>2018-09-19</td>\n",
       "      <td>3262.00</td>\n",
       "      <td>3312.48</td>\n",
       "      <td>3335.99</td>\n",
       "      <td>3258.31</td>\n",
       "      <td>8917066600</td>\n",
       "      <td>109395423837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1635</th>\n",
       "      <td>2018-09-20</td>\n",
       "      <td>3314.88</td>\n",
       "      <td>3310.13</td>\n",
       "      <td>3332.31</td>\n",
       "      <td>3303.07</td>\n",
       "      <td>6456105700</td>\n",
       "      <td>76660845175</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1636</th>\n",
       "      <td>2018-09-21</td>\n",
       "      <td>3320.70</td>\n",
       "      <td>3410.49</td>\n",
       "      <td>3410.49</td>\n",
       "      <td>3307.77</td>\n",
       "      <td>10841600500</td>\n",
       "      <td>123573117858</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1637</th>\n",
       "      <td>2018-09-25</td>\n",
       "      <td>3375.97</td>\n",
       "      <td>3379.80</td>\n",
       "      <td>3394.38</td>\n",
       "      <td>3367.03</td>\n",
       "      <td>6905469300</td>\n",
       "      <td>82870029933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1638</th>\n",
       "      <td>2018-09-26</td>\n",
       "      <td>3388.56</td>\n",
       "      <td>3417.24</td>\n",
       "      <td>3448.26</td>\n",
       "      <td>3383.24</td>\n",
       "      <td>9317334300</td>\n",
       "      <td>119113319089</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1639</th>\n",
       "      <td>2018-09-27</td>\n",
       "      <td>3415.95</td>\n",
       "      <td>3403.59</td>\n",
       "      <td>3423.71</td>\n",
       "      <td>3394.73</td>\n",
       "      <td>6976524100</td>\n",
       "      <td>87573300844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1640</th>\n",
       "      <td>2018-09-28</td>\n",
       "      <td>3409.96</td>\n",
       "      <td>3438.86</td>\n",
       "      <td>3444.99</td>\n",
       "      <td>3404.70</td>\n",
       "      <td>8437775600</td>\n",
       "      <td>94880274571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1641</th>\n",
       "      <td>2018-10-08</td>\n",
       "      <td>3361.56</td>\n",
       "      <td>3290.90</td>\n",
       "      <td>3364.46</td>\n",
       "      <td>3285.25</td>\n",
       "      <td>9788898900</td>\n",
       "      <td>114164218382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1642</th>\n",
       "      <td>2018-10-09</td>\n",
       "      <td>3290.17</td>\n",
       "      <td>3288.69</td>\n",
       "      <td>3309.80</td>\n",
       "      <td>3276.13</td>\n",
       "      <td>6672327400</td>\n",
       "      <td>78372941344</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1643</th>\n",
       "      <td>2018-10-10</td>\n",
       "      <td>3295.43</td>\n",
       "      <td>3281.60</td>\n",
       "      <td>3315.73</td>\n",
       "      <td>3256.58</td>\n",
       "      <td>6449282800</td>\n",
       "      <td>79166808584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1644</th>\n",
       "      <td>2018-10-11</td>\n",
       "      <td>3179.54</td>\n",
       "      <td>3124.11</td>\n",
       "      <td>3209.52</td>\n",
       "      <td>3099.04</td>\n",
       "      <td>12094134200</td>\n",
       "      <td>125723084486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1645</th>\n",
       "      <td>2018-10-12</td>\n",
       "      <td>3123.37</td>\n",
       "      <td>3170.73</td>\n",
       "      <td>3184.12</td>\n",
       "      <td>3094.97</td>\n",
       "      <td>9861115100</td>\n",
       "      <td>104423076622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1646</th>\n",
       "      <td>2018-10-15</td>\n",
       "      <td>3173.85</td>\n",
       "      <td>3126.45</td>\n",
       "      <td>3183.13</td>\n",
       "      <td>3120.23</td>\n",
       "      <td>6960502300</td>\n",
       "      <td>77137696800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1647</th>\n",
       "      <td>2018-10-16</td>\n",
       "      <td>3128.58</td>\n",
       "      <td>3100.97</td>\n",
       "      <td>3166.09</td>\n",
       "      <td>3089.37</td>\n",
       "      <td>6888772100</td>\n",
       "      <td>75206470956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1648</th>\n",
       "      <td>2018-10-17</td>\n",
       "      <td>3140.68</td>\n",
       "      <td>3118.25</td>\n",
       "      <td>3149.13</td>\n",
       "      <td>3062.55</td>\n",
       "      <td>7683713800</td>\n",
       "      <td>86132695913</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1994</th>\n",
       "      <td>2020-03-19</td>\n",
       "      <td>3623.79</td>\n",
       "      <td>3589.09</td>\n",
       "      <td>3647.99</td>\n",
       "      <td>3503.19</td>\n",
       "      <td>18080740700</td>\n",
       "      <td>271827467961</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1995</th>\n",
       "      <td>2020-03-20</td>\n",
       "      <td>3629.51</td>\n",
       "      <td>3653.22</td>\n",
       "      <td>3663.95</td>\n",
       "      <td>3588.78</td>\n",
       "      <td>13960300000</td>\n",
       "      <td>211223073323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1996</th>\n",
       "      <td>2020-03-23</td>\n",
       "      <td>3542.68</td>\n",
       "      <td>3530.31</td>\n",
       "      <td>3585.80</td>\n",
       "      <td>3523.79</td>\n",
       "      <td>13710879000</td>\n",
       "      <td>197669624970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1997</th>\n",
       "      <td>2020-03-24</td>\n",
       "      <td>3598.65</td>\n",
       "      <td>3625.11</td>\n",
       "      <td>3627.76</td>\n",
       "      <td>3545.45</td>\n",
       "      <td>14310302100</td>\n",
       "      <td>208553840688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1998</th>\n",
       "      <td>2020-03-25</td>\n",
       "      <td>3711.48</td>\n",
       "      <td>3722.52</td>\n",
       "      <td>3732.65</td>\n",
       "      <td>3685.99</td>\n",
       "      <td>15349595800</td>\n",
       "      <td>231561518761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1999</th>\n",
       "      <td>2020-03-26</td>\n",
       "      <td>3692.61</td>\n",
       "      <td>3698.05</td>\n",
       "      <td>3736.25</td>\n",
       "      <td>3681.27</td>\n",
       "      <td>11231066500</td>\n",
       "      <td>169336311861</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2000</th>\n",
       "      <td>2020-03-27</td>\n",
       "      <td>3746.39</td>\n",
       "      <td>3710.06</td>\n",
       "      <td>3758.78</td>\n",
       "      <td>3709.92</td>\n",
       "      <td>12406099500</td>\n",
       "      <td>186103426334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2001</th>\n",
       "      <td>2020-03-30</td>\n",
       "      <td>3657.46</td>\n",
       "      <td>3674.11</td>\n",
       "      <td>3690.64</td>\n",
       "      <td>3637.59</td>\n",
       "      <td>12687667300</td>\n",
       "      <td>180640799409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2002</th>\n",
       "      <td>2020-03-31</td>\n",
       "      <td>3708.14</td>\n",
       "      <td>3686.16</td>\n",
       "      <td>3716.07</td>\n",
       "      <td>3676.20</td>\n",
       "      <td>11145302500</td>\n",
       "      <td>161595510008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2003</th>\n",
       "      <td>2020-04-01</td>\n",
       "      <td>3682.30</td>\n",
       "      <td>3675.08</td>\n",
       "      <td>3731.78</td>\n",
       "      <td>3670.97</td>\n",
       "      <td>11935262000</td>\n",
       "      <td>170422568804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2004</th>\n",
       "      <td>2020-04-02</td>\n",
       "      <td>3656.32</td>\n",
       "      <td>3734.53</td>\n",
       "      <td>3734.53</td>\n",
       "      <td>3652.32</td>\n",
       "      <td>11516820900</td>\n",
       "      <td>168893255656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2005</th>\n",
       "      <td>2020-04-03</td>\n",
       "      <td>3721.48</td>\n",
       "      <td>3713.22</td>\n",
       "      <td>3738.83</td>\n",
       "      <td>3698.98</td>\n",
       "      <td>9982508300</td>\n",
       "      <td>150132815028</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2006</th>\n",
       "      <td>2020-04-07</td>\n",
       "      <td>3779.91</td>\n",
       "      <td>3798.02</td>\n",
       "      <td>3803.63</td>\n",
       "      <td>3772.21</td>\n",
       "      <td>14277803000</td>\n",
       "      <td>207642820316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2007</th>\n",
       "      <td>2020-04-08</td>\n",
       "      <td>3776.42</td>\n",
       "      <td>3780.34</td>\n",
       "      <td>3793.00</td>\n",
       "      <td>3767.29</td>\n",
       "      <td>11138951300</td>\n",
       "      <td>161576772320</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2008</th>\n",
       "      <td>2020-04-09</td>\n",
       "      <td>3798.49</td>\n",
       "      <td>3792.81</td>\n",
       "      <td>3801.72</td>\n",
       "      <td>3785.31</td>\n",
       "      <td>10048503200</td>\n",
       "      <td>154595318812</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2009</th>\n",
       "      <td>2020-04-10</td>\n",
       "      <td>3794.84</td>\n",
       "      <td>3769.18</td>\n",
       "      <td>3824.74</td>\n",
       "      <td>3758.96</td>\n",
       "      <td>10244495600</td>\n",
       "      <td>162251233800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010</th>\n",
       "      <td>2020-04-13</td>\n",
       "      <td>3751.71</td>\n",
       "      <td>3753.26</td>\n",
       "      <td>3769.88</td>\n",
       "      <td>3740.19</td>\n",
       "      <td>7905334300</td>\n",
       "      <td>119874303204</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011</th>\n",
       "      <td>2020-04-14</td>\n",
       "      <td>3777.83</td>\n",
       "      <td>3825.70</td>\n",
       "      <td>3825.76</td>\n",
       "      <td>3764.98</td>\n",
       "      <td>11063758500</td>\n",
       "      <td>170612579792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2012</th>\n",
       "      <td>2020-04-15</td>\n",
       "      <td>3820.85</td>\n",
       "      <td>3797.36</td>\n",
       "      <td>3829.80</td>\n",
       "      <td>3793.44</td>\n",
       "      <td>10846198400</td>\n",
       "      <td>169700216633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013</th>\n",
       "      <td>2020-04-16</td>\n",
       "      <td>3777.80</td>\n",
       "      <td>3802.38</td>\n",
       "      <td>3807.36</td>\n",
       "      <td>3774.56</td>\n",
       "      <td>9594796500</td>\n",
       "      <td>147164302056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2014</th>\n",
       "      <td>2020-04-17</td>\n",
       "      <td>3831.92</td>\n",
       "      <td>3839.49</td>\n",
       "      <td>3863.45</td>\n",
       "      <td>3821.42</td>\n",
       "      <td>13200430100</td>\n",
       "      <td>203595267033</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2015</th>\n",
       "      <td>2020-04-20</td>\n",
       "      <td>3845.46</td>\n",
       "      <td>3853.46</td>\n",
       "      <td>3853.80</td>\n",
       "      <td>3831.55</td>\n",
       "      <td>10001311500</td>\n",
       "      <td>151924090116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016</th>\n",
       "      <td>2020-04-21</td>\n",
       "      <td>3838.23</td>\n",
       "      <td>3808.05</td>\n",
       "      <td>3838.23</td>\n",
       "      <td>3780.00</td>\n",
       "      <td>10292188800</td>\n",
       "      <td>155077454132</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017</th>\n",
       "      <td>2020-04-22</td>\n",
       "      <td>3789.13</td>\n",
       "      <td>3839.38</td>\n",
       "      <td>3839.38</td>\n",
       "      <td>3782.21</td>\n",
       "      <td>8589946400</td>\n",
       "      <td>135547280790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018</th>\n",
       "      <td>2020-04-23</td>\n",
       "      <td>3851.91</td>\n",
       "      <td>3829.75</td>\n",
       "      <td>3857.47</td>\n",
       "      <td>3826.56</td>\n",
       "      <td>9550845000</td>\n",
       "      <td>142122548831</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019</th>\n",
       "      <td>2020-04-24</td>\n",
       "      <td>3826.31</td>\n",
       "      <td>3796.97</td>\n",
       "      <td>3827.21</td>\n",
       "      <td>3787.07</td>\n",
       "      <td>9484413500</td>\n",
       "      <td>138961200282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020</th>\n",
       "      <td>2020-04-27</td>\n",
       "      <td>3808.02</td>\n",
       "      <td>3822.77</td>\n",
       "      <td>3842.87</td>\n",
       "      <td>3793.77</td>\n",
       "      <td>9546273500</td>\n",
       "      <td>145301151875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021</th>\n",
       "      <td>2020-04-28</td>\n",
       "      <td>3835.35</td>\n",
       "      <td>3849.15</td>\n",
       "      <td>3859.68</td>\n",
       "      <td>3768.20</td>\n",
       "      <td>12209347600</td>\n",
       "      <td>184179759240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2022</th>\n",
       "      <td>2020-04-29</td>\n",
       "      <td>3837.51</td>\n",
       "      <td>3867.03</td>\n",
       "      <td>3880.74</td>\n",
       "      <td>3833.72</td>\n",
       "      <td>9585459000</td>\n",
       "      <td>151282103744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023</th>\n",
       "      <td>2020-04-30</td>\n",
       "      <td>3880.41</td>\n",
       "      <td>3912.58</td>\n",
       "      <td>3921.70</td>\n",
       "      <td>3880.41</td>\n",
       "      <td>13291712500</td>\n",
       "      <td>202268288802</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>405 rows × 7 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "           time     open    close     high      low       volume         money\n",
       "1619 2018-08-29  3393.05  3386.57  3398.71  3377.12   6702040400   79072300213\n",
       "1620 2018-08-30  3385.81  3351.09  3402.56  3349.47   6838529000   80226052652\n",
       "1621 2018-08-31  3333.38  3334.50  3356.58  3310.87   7620563000   96091892858\n",
       "1622 2018-09-03  3320.69  3321.82  3325.61  3291.78   6642985500   81305681453\n",
       "1623 2018-09-04  3324.19  3363.90  3370.96  3307.96   6708880700   85892034874\n",
       "1624 2018-09-05  3349.70  3298.14  3354.20  3298.14   6430188800   80656675217\n",
       "1625 2018-09-06  3286.66  3262.88  3311.50  3253.76   6230028800   79373138215\n",
       "1626 2018-09-07  3273.89  3277.64  3316.61  3253.72   6394740800   81263439990\n",
       "1627 2018-09-10  3271.38  3230.07  3277.88  3227.85   6381705100   76175580336\n",
       "1628 2018-09-11  3229.71  3224.21  3245.62  3209.11   5849130500   67722118923\n",
       "1629 2018-09-12  3216.99  3202.02  3225.60  3194.98   5462789900   68887020055\n",
       "1630 2018-09-13  3239.69  3236.57  3249.59  3191.40   6729032700   85887962112\n",
       "1631 2018-09-14  3242.83  3242.09  3254.10  3227.94   6013064000   76481211955\n",
       "1632 2018-09-17  3224.93  3204.92  3230.79  3200.51   5225954700   60650940907\n",
       "1633 2018-09-18  3193.64  3269.43  3270.11  3193.64   7042503500   83899137593\n",
       "1634 2018-09-19  3262.00  3312.48  3335.99  3258.31   8917066600  109395423837\n",
       "1635 2018-09-20  3314.88  3310.13  3332.31  3303.07   6456105700   76660845175\n",
       "1636 2018-09-21  3320.70  3410.49  3410.49  3307.77  10841600500  123573117858\n",
       "1637 2018-09-25  3375.97  3379.80  3394.38  3367.03   6905469300   82870029933\n",
       "1638 2018-09-26  3388.56  3417.24  3448.26  3383.24   9317334300  119113319089\n",
       "1639 2018-09-27  3415.95  3403.59  3423.71  3394.73   6976524100   87573300844\n",
       "1640 2018-09-28  3409.96  3438.86  3444.99  3404.70   8437775600   94880274571\n",
       "1641 2018-10-08  3361.56  3290.90  3364.46  3285.25   9788898900  114164218382\n",
       "1642 2018-10-09  3290.17  3288.69  3309.80  3276.13   6672327400   78372941344\n",
       "1643 2018-10-10  3295.43  3281.60  3315.73  3256.58   6449282800   79166808584\n",
       "1644 2018-10-11  3179.54  3124.11  3209.52  3099.04  12094134200  125723084486\n",
       "1645 2018-10-12  3123.37  3170.73  3184.12  3094.97   9861115100  104423076622\n",
       "1646 2018-10-15  3173.85  3126.45  3183.13  3120.23   6960502300   77137696800\n",
       "1647 2018-10-16  3128.58  3100.97  3166.09  3089.37   6888772100   75206470956\n",
       "1648 2018-10-17  3140.68  3118.25  3149.13  3062.55   7683713800   86132695913\n",
       "...         ...      ...      ...      ...      ...          ...           ...\n",
       "1994 2020-03-19  3623.79  3589.09  3647.99  3503.19  18080740700  271827467961\n",
       "1995 2020-03-20  3629.51  3653.22  3663.95  3588.78  13960300000  211223073323\n",
       "1996 2020-03-23  3542.68  3530.31  3585.80  3523.79  13710879000  197669624970\n",
       "1997 2020-03-24  3598.65  3625.11  3627.76  3545.45  14310302100  208553840688\n",
       "1998 2020-03-25  3711.48  3722.52  3732.65  3685.99  15349595800  231561518761\n",
       "1999 2020-03-26  3692.61  3698.05  3736.25  3681.27  11231066500  169336311861\n",
       "2000 2020-03-27  3746.39  3710.06  3758.78  3709.92  12406099500  186103426334\n",
       "2001 2020-03-30  3657.46  3674.11  3690.64  3637.59  12687667300  180640799409\n",
       "2002 2020-03-31  3708.14  3686.16  3716.07  3676.20  11145302500  161595510008\n",
       "2003 2020-04-01  3682.30  3675.08  3731.78  3670.97  11935262000  170422568804\n",
       "2004 2020-04-02  3656.32  3734.53  3734.53  3652.32  11516820900  168893255656\n",
       "2005 2020-04-03  3721.48  3713.22  3738.83  3698.98   9982508300  150132815028\n",
       "2006 2020-04-07  3779.91  3798.02  3803.63  3772.21  14277803000  207642820316\n",
       "2007 2020-04-08  3776.42  3780.34  3793.00  3767.29  11138951300  161576772320\n",
       "2008 2020-04-09  3798.49  3792.81  3801.72  3785.31  10048503200  154595318812\n",
       "2009 2020-04-10  3794.84  3769.18  3824.74  3758.96  10244495600  162251233800\n",
       "2010 2020-04-13  3751.71  3753.26  3769.88  3740.19   7905334300  119874303204\n",
       "2011 2020-04-14  3777.83  3825.70  3825.76  3764.98  11063758500  170612579792\n",
       "2012 2020-04-15  3820.85  3797.36  3829.80  3793.44  10846198400  169700216633\n",
       "2013 2020-04-16  3777.80  3802.38  3807.36  3774.56   9594796500  147164302056\n",
       "2014 2020-04-17  3831.92  3839.49  3863.45  3821.42  13200430100  203595267033\n",
       "2015 2020-04-20  3845.46  3853.46  3853.80  3831.55  10001311500  151924090116\n",
       "2016 2020-04-21  3838.23  3808.05  3838.23  3780.00  10292188800  155077454132\n",
       "2017 2020-04-22  3789.13  3839.38  3839.38  3782.21   8589946400  135547280790\n",
       "2018 2020-04-23  3851.91  3829.75  3857.47  3826.56   9550845000  142122548831\n",
       "2019 2020-04-24  3826.31  3796.97  3827.21  3787.07   9484413500  138961200282\n",
       "2020 2020-04-27  3808.02  3822.77  3842.87  3793.77   9546273500  145301151875\n",
       "2021 2020-04-28  3835.35  3849.15  3859.68  3768.20  12209347600  184179759240\n",
       "2022 2020-04-29  3837.51  3867.03  3880.74  3833.72   9585459000  151282103744\n",
       "2023 2020-04-30  3880.41  3912.58  3921.70  3880.41  13291712500  202268288802\n",
       "\n",
       "[405 rows x 7 columns]"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[1619:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2024, 7)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_feature = df[['close','open','high', 'low', 'volume', 'money']].astype('float')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample_num = df.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_num = int(df.shape[0] * 0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_num = df.shape[0] - train_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2024, 1619, 405)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample_num,train_num,test_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1619, 6) (405, 6)\n"
     ]
    }
   ],
   "source": [
    "data_train = df_feature.iloc[:train_num, :]\n",
    "data_test = df_feature.iloc[train_num:, :]\n",
    "print(data_train.shape, data_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MinMaxScaler(copy=True, feature_range=(0, 1))"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaler.fit(data_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_train = scaler.transform(data_train)\n",
    "data_test = scaler.transform(data_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1619,) (405,)\n"
     ]
    }
   ],
   "source": [
    "data_train_y = np.array(df_feature.iloc[:train_num, 0])\n",
    "data_test_y = np.array(df_feature.iloc[train_num:, 0])\n",
    "print(data_train_y.shape, data_test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "PAST_TIME_STEPS = 10\n",
    "NEXT_TIME_STEPS = 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#X_train = np.array([data_train[i : i + PAST_TIME_STEPS, :] for i in range(0,data_train.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),4)])\n",
    "#X_test = np.array([data_test[i : i + PAST_TIME_STEPS, :] for i in range(0,data_test.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),4)])\n",
    "X_train = np.array([data_train[i : i + PAST_TIME_STEPS, :] for i in range(0,data_train.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),1)])\n",
    "X_test = np.array([data_test[i : i + PAST_TIME_STEPS, :] for i in range(0,data_test.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),1)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "#y_train_regression = np.array([data_train_y[i + PAST_TIME_STEPS + NEXT_TIME_STEPS-1] for i in range(0,data_train.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),4)])\n",
    "#y_test_regression = np.array([data_test_y[i + PAST_TIME_STEPS + NEXT_TIME_STEPS-1] for i in range(0,data_test.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),4)])\n",
    "\n",
    "y_train_regression = np.array([data_train_y[i + PAST_TIME_STEPS + NEXT_TIME_STEPS] for i in range(0,data_train.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),1)])\n",
    "y_test_regression = np.array([data_test_y[i + PAST_TIME_STEPS + NEXT_TIME_STEPS] for i in range(0,data_test.shape[0] - (NEXT_TIME_STEPS+ PAST_TIME_STEPS),1)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1606, 10, 6) (1606,) (392, 10, 6) (392,)\n"
     ]
    }
   ],
   "source": [
    "print(X_train.shape, y_train_regression.shape, X_test.shape,y_test_regression.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "INPUT_DIM = data_train.shape[1]\n",
    "output_dim = 1\n",
    "batch_size = 8 #每轮训练模型时，样本的数量\n",
    "epochs = 2000 #训练60轮次\n",
    "hidden_size = 128\n",
    "lstm_units = 64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LSTM_fun(n_input,train_x,train_y,predict_x,prediction_y,seq_len=5):\n",
    "    #LSTM\n",
    "    lr=0.001\n",
    "    lstm_size = 100  #lstm cell数量，基于数据量调整\n",
    "    epoch_num = 10  #打印次数，和n_batch相乘便是迭代次数\n",
    "    n_batch = 10\n",
    "    lookback = seq_len\n",
    "    tf.reset_default_graph()\n",
    "    train_y = np.reshape(train_y, [train_y.shape[0], 1])\n",
    "    prediction_y = np.reshape(prediction_y, [prediction_y.shape[0], 1])\n",
    "\n",
    "    x = tf.placeholder(tf.float32,[None,lookback,n_input])\n",
    "    y = tf.placeholder(tf.float32,[None,1])\n",
    "\n",
    "    weights = tf.Variable(tf.truncated_normal([lstm_size,1],stddev=0.1))\n",
    "    biases = tf.Variable(tf.constant(0.1,shape=[1]))\n",
    "\n",
    "    def LSTM_net(x,weights,biases):\n",
    "        lstm_cell = tf.contrib.rnn.LSTMCell(lstm_size,name='basic_lstm_cell') #.BasicLSTMCell(lstm_size)\n",
    "        output,final_state = tf.nn.dynamic_rnn(lstm_cell,x,dtype=tf.float32)\n",
    "        results = tf.matmul(final_state[1],weights)+biases\n",
    "        return results\n",
    "\n",
    "    prediction = LSTM_net(x,weights,biases)\n",
    "\n",
    "    loss = tf.reduce_mean(tf.square(y - prediction))\n",
    "\n",
    "    #train_step = tf.train.GradientDescentOptimizer(lr).minimize(loss)\n",
    "    train_step = tf.train.AdamOptimizer(lr).minimize(loss)\n",
    "\n",
    "    init = tf.global_variables_initializer()\n",
    "    with tf.Session() as sess:\n",
    "        sess.run(init)\n",
    "        for i in range(epoch_num):\n",
    "            for j in range(n_batch):\n",
    "                sess.run(train_step,feed_dict={x:train_x,y:train_y})\n",
    "                train_loss = sess.run(loss,feed_dict={x:train_x,y:train_y})\n",
    "            print('train loss is'+ str(train_loss))\n",
    "        prediction_res = sess.run(prediction,feed_dict={x:predict_x})\n",
    "    return prediction_res\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LSTM_fun_keras(n_input,train_x,train_y,predict_x,prediction_y,seq_len=5):\n",
    "    K.get_session().close()\n",
    "    K.set_session(tf.Session())\n",
    "    K.get_session().run(tf.global_variables_initializer())\n",
    "    # create and fit the LSTM network\n",
    "    model = Sequential()\n",
    "    model.add(LSTM(units=50, return_sequences=True, input_shape=(seq_len,n_input)))\n",
    "    model.add(LSTM(units=50))\n",
    "    model.add(Dense(1,activation='linear'))\n",
    "    print(model.summary())\n",
    "    \n",
    "    model.compile(loss='mean_squared_error', optimizer='adam')\n",
    "    #model_class.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])\n",
    "    # simple early stopping\n",
    "    es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=5)\n",
    "    # fit model\n",
    "    history = model.fit(train_x, train_y,validation_split=0.1, epochs=epochs, batch_size=1, shuffle=False, verbose=2, callbacks=[es])\n",
    "    #history_class = model_class.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, shuffle=False)\n",
    "    y_pred = model.predict(predict_x)\n",
    "    return y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LSTM_fun_keras_att(n_input,train_x,train_y,predict_x,prediction_y,seq_len=5):\n",
    "    K.get_session().close()\n",
    "    K.set_session(tf.Session())\n",
    "    K.get_session().run(tf.global_variables_initializer())\n",
    "    inputs = Input(shape=(seq_len, n_input))\n",
    "    #drop1 = Dropout(0.3)(inputs)\n",
    "    x = Conv1D(filters = 32, kernel_size = 1, activation = 'relu')(inputs)  #, padding = 'same'\n",
    "    #x = Conv1D(filters=128, kernel_size=5, activation='relu')(output1)#embedded_sequences\n",
    "    x = MaxPooling1D(pool_size = PAST_TIME_STEPS)(x)\n",
    "    x = Dropout(0.1)(x)\n",
    "    print(x.shape)\n",
    "    lstm_out = Bidirectional(LSTM(32, activation='relu'), name='bilstm')(x)\n",
    "    #lstm_out = LSTM(lstm_units,activation='relu')(x)\n",
    "    print(lstm_out.shape)\n",
    "    # ATTENTION PART STARTS HERE\n",
    "    attention_probs = Dense(64, activation='sigmoid', name='attention_vec')(lstm_out)\n",
    "    #attention_mul=layers.merge([stm_out,attention_probs], output_shape],mode='concat',concat_axis=1))\n",
    "    attention_mul =Multiply()([lstm_out, attention_probs])\n",
    "    #attention_mul = merge([lstm_out, attention_probs],output_shape=32, name='attention_mul', mode='mul')\n",
    "    output = Dense(1, activation='linear')(attention_mul)\n",
    "    #output = Dense(10, activation='sigmoid')(drop2)\n",
    "\n",
    "    model = Model(inputs=inputs, outputs=output)\n",
    "    print(model.summary())\n",
    "    model.compile(loss='mse', optimizer='adam')\n",
    "    #model_class.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])\n",
    "    # simple early stopping\n",
    "    es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=2)\n",
    "    # fit model\n",
    "    history = model.fit(train_x, train_y,validation_split=0.1, epochs=epochs, batch_size=1, shuffle=False, verbose=2, callbacks=[es])\n",
    "    #history = model.fit(train_x, train_y, epochs=100, batch_size=1, shuffle=False)\n",
    "    y_pred = model.predict(predict_x)\n",
    "    return y_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(?, 1, 32)\n",
      "(?, 64)\n",
      "__________________________________________________________________________________________________\n",
      "Layer (type)                    Output Shape         Param #     Connected to                     \n",
      "==================================================================================================\n",
      "input_13 (InputLayer)           (None, 10, 6)        0                                            \n",
      "__________________________________________________________________________________________________\n",
      "conv1d_13 (Conv1D)              (None, 10, 32)       224         input_13[0][0]                   \n",
      "__________________________________________________________________________________________________\n",
      "max_pooling1d_13 (MaxPooling1D) (None, 1, 32)        0           conv1d_13[0][0]                  \n",
      "__________________________________________________________________________________________________\n",
      "dropout_10 (Dropout)            (None, 1, 32)        0           max_pooling1d_13[0][0]           \n",
      "__________________________________________________________________________________________________\n",
      "bilstm (Bidirectional)          (None, 64)           16640       dropout_10[0][0]                 \n",
      "__________________________________________________________________________________________________\n",
      "attention_vec (Dense)           (None, 64)           4160        bilstm[0][0]                     \n",
      "__________________________________________________________________________________________________\n",
      "multiply_13 (Multiply)          (None, 64)           0           bilstm[0][0]                     \n",
      "                                                                 attention_vec[0][0]              \n",
      "__________________________________________________________________________________________________\n",
      "dense_15 (Dense)                (None, 1)            65          multiply_13[0][0]                \n",
      "==================================================================================================\n",
      "Total params: 21,089\n",
      "Trainable params: 21,089\n",
      "Non-trainable params: 0\n",
      "__________________________________________________________________________________________________\n",
      "None\n",
      "Train on 1445 samples, validate on 161 samples\n",
      "Epoch 1/100\n",
      " - 22s - loss: 1855820.6746 - val_loss: 58793.3370\n",
      "Epoch 2/100\n",
      " - 10s - loss: 135656.2254 - val_loss: 44668.2770\n",
      "Epoch 3/100\n",
      " - 8s - loss: 105912.8091 - val_loss: 36765.9920\n",
      "Epoch 4/100\n",
      " - 7s - loss: 80198.0567 - val_loss: 26160.1219\n",
      "Epoch 5/100\n",
      " - 5s - loss: 72971.5051 - val_loss: 22916.2027\n",
      "Epoch 6/100\n",
      " - 7s - loss: 66108.5043 - val_loss: 20528.0702\n",
      "Epoch 7/100\n",
      " - 7s - loss: 57325.0751 - val_loss: 20414.7920\n",
      "Epoch 8/100\n",
      " - 5s - loss: 57755.4503 - val_loss: 19461.6724\n",
      "Epoch 9/100\n",
      " - 5s - loss: 56165.2885 - val_loss: 25338.4973\n",
      "Epoch 10/100\n",
      " - 5s - loss: 58312.8245 - val_loss: 24258.9810\n",
      "Epoch 00010: early stopping\n"
     ]
    }
   ],
   "source": [
    "y_pred_regression = LSTM_fun_keras_att(INPUT_DIM, X_train, y_train_regression, X_test, y_test_regression,seq_len=PAST_TIME_STEPS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot training history\n",
    "plt.plot(y_test_regression, label='test')\n",
    "plt.plot(y_pred_regression, label='pred')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:py35]",
   "language": "python",
   "name": "conda-env-py35-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
